小当家ISV
互联网高新技术服务商

全球共有10多个国家和地区1000多个平台,20万+商户使用

c#中依赖注入的实现

作者:    李炳坤       发布时间:     2024-03-16          313      分类专栏: 后端开发

在 C# 中,依赖注入(Dependency Injection,简称 DI)是一种编程技术,用于减少代码之间的耦合。依赖注入可以通过构造函数注入、属性注入或方法注入实现。在 .NET Core 和 .NET 5+ 中,还提供了一个内置的依赖注入容器。

以下是一个简单的构造函数注入的例子:

public interface IService

{

    void Serve();

}


public class Service : IService

{

    public void Serve()

    {

        Console.WriteLine("Service Called");

        //To Do: Some Stuff

    }

}


public class Client

{

    private IService _service;


    public Client(IService service)

    {

        this._service = service;

    }


    public void Start()

    {

        Console.WriteLine("Service Started");

        this._service.Serve();

        //To Do: Some Stuff

    }

}

在这个例子中,Client 类依赖于 IService。通过将 IService 作为 Client 的构造函数的参数,我们可以在创建 Client 对象时将任何实现了 IService 接口的对象注入 Client。这样,Client 就不再直接依赖于 Service 类,而是依赖于 IService 接口,这降低了代码之间的耦合。


.NET Core 和 .NET 5+ 提供了一个内置的依赖注入容器,可以更容易地实现依赖注入。以下是一个例子:


public void ConfigureServices(IServiceCollection services)

{

    services.AddTransient<IService, Service>();

}

在这个例子中,AddTransient 方法告诉依赖注入容器,每次有类需要 IService 时,都应该创建一个新的 Service 类实例。你也可以使用 AddSingleton 方法来创建一个在整个应用程序生命周期中只有一个实例的服务,或者使用 AddScoped 方法来创建一个在每个请求作用域中都是唯一的服务。


总的来说,依赖注入是一种强大的技术,可以帮助你创建更灵活、更易于测试和维护的代码。虽然实现依赖注入需要一些额外的工作,但在大多数情况下,这都是值得的。


依赖注入主要有三种形式:构造器注入,属性注入和方法注入。


构造器注入:这是最常见的依赖注入类型,也是最推荐的类型。在这种情况下,依赖性(如服务或组件)通过类的构造函数传递。


属性注入:在这种情况下,依赖性通过类的公共属性设置。这种类型的注入一般不推荐,因为它可能会导致对象的状态在创建后被改变。但在某些情况下,例如在处理与框架集成的情况下,属性注入可能是必要的。


方法注入:在这种情况下,依赖性通过方法参数传递。这种类型的依赖注入主要用于那些只有在特定方法调用时才需要依赖的情况。

在.NET Core中,有一个内置的依赖注入服务容器,用于注册和解析依赖关系。以下是如何使用内置DI容器的示例:


public class Startup

{

    public void ConfigureServices(IServiceCollection services)

    {

        // 注册服务

        services.AddScoped<IMyService, MyService>();

    }

}

在上述代码中,AddScoped方法用于将服务MyService注册为作用域生命周期的服务。这意味着在相同的请求中,每次请求IMyService都会得到相同的实例。其他可用的方法有AddTransient(每次请求都创建新的实例)和AddSingleton(整个应用程序生命周期内只创建一个实例)。


然后,在需要使用服务的地方,你只需要在构造函数中添加一个参数:


public class MyController : Controller

{

    private readonly IMyService _myService;


    public MyController(IMyService myService)

    {

        _myService = myService;

    }


    public IActionResult Index()

    {

        _myService.DoSomething();


        return View();

    }

}

public class MyController : Controller

{

    private readonly IMyService _myService;


    public MyController(IMyService myService)

    {

        _myService = myService;

    }


    public IActionResult Index()

    {

        _myService.DoSomething();


        return View();

    }

}


在这个例子中,当创建MyController的新实例时,.NET Core的依赖注入容器会自动提供IMyService的实例。


依赖注入是一种强大的设计模式,它能够帮助你管理和解耦你的代码,使代码更易于测试和维护。


所属分类: 后端开发
软件工程中的软件架构模式MVC
SqlSugar分页查询

小当家,帮您把生意越做越大!

小当家ISV,重庆APP开发,小程序开发,软件系统开发 地址:重庆市南岸区南坪万达广场写字楼2栋19-6 联系电话:023-81361879

ICP备案号:渝ICP备15003473-1 增值电信业务许可证: 渝B2-15003473 渝公网安备 50010802005103号

友情链接: 小当家点餐收银系统   MagicShop商城  重庆微信营销  重庆智能家居  重庆红岭医院 

重庆小当家互联网信息技术有限公司